package spring.boot.admin.service;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import spring.boot.admin.mapper.SysUserRoleMapper;
import spring.boot.admin.model.SysUserRole;

import java.util.ArrayList;
import java.util.List;


/**
 * 如果整个service都是使用的two数据源，可以放在类上面
 */
@Service
@DS("master")
public class SysUserRoleService extends ServiceImpl<SysUserRoleMapper, SysUserRole> {

    /**
     * 根据角色id查询 用户角色 关联关系数量
     */
    public int countByRoleId(Long roleId) {
        QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>();
        wrapper.eq("sys_role_id", roleId);
        return count(wrapper);
    }


    /**
     * 根据用户id查询 用户角色 关联关系数量
     */
    public int countByUserId(Long userId) {
        QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>();
        wrapper.eq("sys_user_id", userId);
        return count(wrapper);
    }


    /**
     * 根据用户id查询用户拥有的所有角色
     */
    public List<Long> selectRoleIdsByUserId(Long userId) {
        return baseMapper.selectRoleIdsByUserId(userId);
    }


    /**
     * 更新用户的角色
     */
    public String updateUserRole(Long userId, Long[] roleIds) {
        //根据用户id，删除所有用户对应的角色关系
        UpdateWrapper<SysUserRole> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("sys_user_id", userId);
        remove(updateWrapper);
        //批量新增新的用户角色关系
        List<SysUserRole> list = new ArrayList<>();
        for (int i = 0; i < roleIds.length; i++) {
            SysUserRole sysUserRole = new SysUserRole();
            sysUserRole.setSysUserId(userId);
            sysUserRole.setSysRoleId(roleIds[i]);
            list.add(sysUserRole);
        }
        saveBatch(list);
        return "1";
    }


}
